import axios from 'axios'

const instance = axios.create({
  baseURL: import.meta.env.VITE_APP_BASEURL,
  timeout: 3000 * 10
  // headers: {'X-Custom-Header': '花花'}
})

instance.interceptors.request.use(config => {
  return config
}, error => {
  // return (Promise as any).error(error)
  console.log(error);
})
instance.interceptors.response.use(
  response => {
    // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据     
    // 否则的话抛出错误    
    if (response.data.code === 200) {
      return Promise.resolve(response);
    } else {
      window.$message.error(response.data.message)
      return Promise.reject(response);
    }
  },    
  // 服务器状态码不是2开头的的情况
  // 这里可以跟你们的后台开发人员协商好统一的错误状态码    
  // 然后根据返回的状态码进行一些操作，例如登录过期提示，错误提示等等
  // 下面列举几个常见的操作，其他需求可自行扩展
  error => {
      window.$message.error('服务器繁忙')
      return Promise.reject(error)
  }
);
export default instance

export const post: any = (url: any, param: any) => {
  return new Promise((resolve, reject) => {
    instance({
      method: 'post',
      url: url,
      data: param
    }).then(res => {
      resolve(res.data)
    }).catch(e => {
      reject(e.data)
    })
  })
}

export const get = (url: any, param: any) => {
  return new Promise((resolve, reject) => {
    instance({
      method: 'get',
      url: url,
      params: param
    }).then(res => {
      resolve(res.data)
    }).catch(e => {
      reject(e.data)
    })
  })
}

export const postStream: any = (url: any, param: any) => {
  return new Promise((resolve, reject) => {
    fetch(import.meta.env.VITE_APP_BASEURL + url, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(param)
    }).then(response => {
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`)
      }
      resolve(response)
    }).catch(error => {
      window.$message.error('流式请求失败: ' + error.message)
      reject(error)
    })
  })
}

